const mysql = require('mysql')
const fs = require('fs')

/**
 * 1、读取 MySQL 数据库配置文件
 */
let host = '127.0.0.1' // 数据库的 IP 地址
let port = 3306 // 端口
let user = 'root' // 登录数据库的账号
let password = 'rootroot' // 登录数据库的密码
let database = 'jwzs_database' // 指定要操作哪个数据库
// 如果存在配置文件，则读取配置文件中的配置
if (fs.existsSync('config.json')) {
  const res = JSON.parse(fs.readFileSync('config.json'))
  host = res.host
  port = res.port
  user = res.user
  password = res.password
  database = res.database
}
/**
 * 2. 建立与 MySQL 数据库的连接关系
 */
const db = mysql.createPool({
  host,
  port,
  user,
  password,
  database,
  multipleStatements: true,
  charset: 'utf8mb4'
})

/**
 * 3. 建表
 */
// 创建用户 user 表
const initUserTable = () => {
  const sql = `
    CREATE TABLE IF NOT EXISTS sys_user (
      user_id           bigint(20)      not null auto_increment    comment '用户ID',
      dept_id           bigint(20)      default null               comment '部门ID',
      user_name         varchar(30)     not null                   comment '用户账号',
      password          varchar(100)    default ''                 comment '密码',
      nick_name         varchar(30)     not null                   comment '用户昵称',
      user_type         varchar(2)      default '00'               comment '用户类型（00系统用户）',
      email             varchar(50)     default ''                 comment '用户邮箱',
      phonenumber       varchar(11)     default ''                 comment '手机号码',
      sex               char(1)         default '0'                comment '用户性别（0男 1女 2未知）',
      avatar            varchar(100)    default ''                 comment '头像地址',
      salt              VARCHAR(20)     NOT NULL                   comment '加盐', 
      signature         LONGTEXT        NULL                       comment '个人说明', 
      status            char(1)         default '0'                comment '帐号状态（0正常 1停用）',
      del_flag          char(1)         default '0'                comment '删除标志（0代表存在 2代表删除）',
      login_ip          varchar(128)    default ''                 comment '最后登录IP',
      login_date        datetime                                   comment '最后登录时间',
      create_by         varchar(64)     default ''                 comment '创建者',
      create_time       datetime                                   comment '创建时间',
      update_by         varchar(64)     default ''                 comment '更新者',
      update_time       datetime                                   comment '更新时间',
      remark            varchar(500)    default null               comment '备注',
      primary key (user_id)
    ) engine=innodb auto_increment=100 comment = '用户信息表';
  `
  db.query(sql, error => {
    // eslint-disable-next-line no-console
    if (error) console.log(error)
  })
}
/**
 * 4、测试 mysql 模块能否正常工作
 */
db.query('select 1', error => {
  // mysql 模块工作期间报错了，就进入这个 if 判断语句，打印这个错误信息
  if (error) {
    // eslint-disable-next-line no-console
    console.log('MySQL 连接失败', error.message)
    process.exit(1)
  }
  initUserTable()
  // eslint-disable-next-line no-console
  console.log('MySQL 连接成功')
})

/**
 * 5、将连接好的数据库对象向外导出, 供外界使用
 */
module.exports = db